package com.itheima.day14.threadStatus.test1;
//目的 : 本案例主要演示TIME_WAITING的状态转换。
//
//        需求：编写一段代码，依次显示一个线程的这些状态：NEW -> RUNNABLE -> TIME_WAITING -> RUNNABLE -> TERMINATED
//
//        为了简化我们的开发，本次我们使用匿名内部类结合lambda表达式的方式使用多线程。

public class Test1 {
    public static void main(String[] args) throws InterruptedException {
        // 定义一个线程内部类
        Thread t = new Thread(() -> {
            System.out.println("2.执行完t.start(100)之后，线程的状态：" + Thread.currentThread().getState());
            // 休眠100毫秒
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("4.执行完t.sleep()完成之后，线程的状态：" + Thread.currentThread().getState());
        });

        // 获取start()之前的状态
        System.out.println("1.通过new初始化一个线程，但是还没有start()之前，线程的状态：" + t.getState());

        // 启动线程
        t.start();

        // main线程休眠50毫秒
        Thread.sleep(50);

        // 因为t线程需要休眠100毫秒，所以在低50毫秒，t线程处于sleep状态
        System.out.println("3.执行Thread.sleep(50)时，线程的状态：" + t.getState());

        // t 和 main线程主动休眠150毫秒，所以在第150毫秒，t早已执行完毕
        Thread.sleep(100);

        System.out.println("5.线程执行完毕之后，线程的状态：" + t.getState() + "\n");
    }

    // 打印结果：
//      1.通过new初始化一个线程，但是还没有start()之前，线程的状态：NEW
//      2.执行完t.start()之后，线程的状态：RUNNABLE
//      3.执行Thread.sleep(50)时，线程的状态：TIMED_WAITING
//      4.执行完t.sleep(100)完成之后，线程的状态：RUNNABLE
//      5.线程执行完毕之后，线程的状态：TERMINATED
}
